package com.jxin.mall.member.domain.service;

import com.jxin.mall.member.domain.entity.LoginHistory;
import com.jxin.mall.member.domain.exception.LoginHistoryServiceException;
import org.springframework.lang.Nullable;

/**
 * 登入历史服务接口
 * @author  蔡佳新
 * @version 1.0
 * @since   jdk 1.8
 */
public interface LoginHistoryService {
    /**
     * 查看启用的登入历史, 根据用户id和登录类型
     * @param  userId     用户Id
     * @param  loginType  登录类型
     * @throws LoginHistoryServiceException 查询启用登录历史异常时
     * @return 启用的 {@link LoginHistory} 实例,不存在则返回 <code>null</code>
     */
    @Nullable
    LoginHistory findEnableLoginHistoryByUserIdAndloginType(Integer userId, Integer loginType);

    /**
     * 查看启用的登入历史, 根据token
     * @param  token     令牌
     * @throws LoginHistoryServiceException 查询启用登录历史异常时
     * @return 启用的 {@link LoginHistory} 实例,不存在则返回 <code>null</code>
     */
    @Nullable
    LoginHistory getEnableLoginHistoryByToken(String token);

    /**
     * 根据Id失效指定的登入记录的token
     * @param  loginHistoryId 历史记录Id
     * @throws LoginHistoryServiceException 更新数据库失败
     * @return 如果失效成功则返回 <code>true</code>
     */
    Boolean disableLoginHistory(Integer loginHistoryId);

    /**
     * 创建新的登入记录
     * @param  loginHistory 登录历史记录
     * @throws LoginHistoryServiceException 插入数据库失败
     * @return 插入成功返回 <code>true</code>
     */
    Boolean createLoginHistory(LoginHistory loginHistory);
}
